// -------------------------------------------------------------------------
//    @FileName         :    NFCAccountRedisModule.h
//    @Author           :    LvSheng.Huang
//    @Date             :    2016-11-07
//    @Module           :    NFCAccountRedisModule
//    @Desc             :
// -------------------------------------------------------------------------

#ifndef NFC_ACCOUNT_REDIS_MODULE_H
#define NFC_ACCOUNT_REDIS_MODULE_H

#include "NFComm/NFMessageDefine/NFMsgDefine.h"
#include "NFComm/NFMessageDefine/NFProtocolDefine.hpp"
#include "NFComm/NFPluginModule/NFIClassModule.h"
#include "NFComm/NFPluginModule/NFILogModule.h"
#include "NFComm/NFPluginModule/NFIElementModule.h"
#include "NFComm/NFPluginModule/NFIPlayerDBModule.h"
#include "NFComm/NFPluginModule/NFIAccountDBModule.h"
#include "NFComm/NFPluginModule/NFINoSqlModule.h"
#include "NFComm/NFPluginModule/NFICommonDBModule.h"
#include "NFComm/NFPluginModule/NFIPluginManager.h"
#include "NFComm/NFPluginModule/NFIKernelModule.h"

#include "NFComm/NFPluginModule/NFIAsyMysqlModule.h"

class NFCAccountDBModule : public NFIAccountDBModule
{
public:

    NFCAccountDBModule(NFIPluginManager* p)
    {
        pPluginManager = p;
    }

    virtual bool Init();
    virtual bool Shut();
    virtual bool Execute();

    virtual bool AfterInit();

    virtual int VerifyAccount(const std::string& strAccount, const std::string& strPwd);
    virtual bool AddAccount(const std::string& strAccount, const std::string& strPwd);
    virtual bool ExistAccount(const std::string& strAccount);

    virtual bool ExistRoleGuid(const NFGUID& id);
    virtual bool CreateAccountInfoToRedis(const std::string& strAccount, const NFGUID& id);
    virtual bool LoadAccountInfoFromRedis(const std::string& strAccount, NFGUID& id);

    virtual bool CreateAccountInfoToMysql(const std::string& strAccount, const NFGUID& id);
    virtual void RecvCreateAccountInfoToMysql(const NFGUID& self, const int nRet, const std::string& strUseData);

    virtual int SendAsynGetAccountInfoFromMysql(const NFGUID& client, const std::string& account, int gateId, const MYSQL_RETURN_VECKEY_VECVALUE_FUNCTOR& mFunReturnVeckKeyValueRsp);
    virtual void RecvAsynGetAccountInfoFromMysql(const std::vector<std::string>& fieldVec, const std::vector<std::string>& valueVec, std::string& account, NFGUID& roleId);
protected:

private:
    NFIClassModule* m_pLogicClassModule;
    NFINoSqlModule* m_pNoSqlModule;
    NFICommonDBModule* m_pCommonRedisModule;
    NFIKernelModule* m_pKernelModule;
    NFIAsyMysqlModule* m_pAsyMysqlModule;
    NFILogModule* m_pLogModule;
};


#endif
